/**
 * Copyright (C), 2015-2020, XXX有限公司
 * FileName: Main
 * Author:   AEO WUGUOZHI
 * Date:     2020/7/19 14:42
 * Description: 字符串
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package 常用类;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;


/**
 * 〈一句话功能简述〉<br>
 * 〈字符串〉
 *
 * @author AEO WUGUOZHI
 * @create 2020/7/19
 * @since 1.0.0
 */
public class Main {

    public static void main(String[] args) {
/*
        //2-1
        String hobby = "爱慕课";
        String url = "ww.imooc.com";
        System.out.println("hobby:" + hobby + "\n" + "url:" + url);


        //2-2

        String s1 = "imooc";
        String s2 = "imooc";

        //定义字符串s3，保存“I love”和s1拼接后的内容
        String s3 = "I love " + s1;
        System.out.println("s1和s2内存地址相同吗?只创建一个对象" + (s1 == s2));      //true

        System.out.println("s1和s3的内存地址相同吗？"+ (s3 == s1));               //false

        String s4 = "I love " + s1;                                    //false  why     因为s1是变量，s4在运行的时候才知道具体值，所以s3和s4是不同的对象。

        System.out.println("s3和s4内存地址相同吗?"+(s4 == s3));

        String x = new String("1");
        String a = new String("1");
        System.out.println(a == x);

        //2-3

        String str = "学习 JAVA 编程";
        System.out.println("字符串长度:"+str.length());               //10

        //indexOf
        char c = '编';
        System.out.println("字符'编'的位置：" + str.indexOf(c));                //8
        System.out.println("子字符串'imooc'的位置：" + str.indexOf("imooc"));    //没有匹配结果，返回-1;
        System.out.println("子字符串'JAVA'的位置：" + str.indexOf("JAVA"));       //3

        //split
        String[] arr = str.split(" ");
        System.out.println("按空格拆分成数组：" + Arrays.toString(arr));              //[学习,JAVA,编程]

        //subString()
        System.out.println("获取位置[3,7]之间的子串：" + str.substring(0,7));                //JAVA    [startindex,endindex-1]

*/
/*
        //2-3 practice
        // Java文件名
        String fileName = "HelloWorld.java";
        // 邮箱
        String email = "laurenyang@imooc.com";

        // 判断.java文件名是否正确：合法的文件名应该以.java结尾
        /*
        参考步骤：
        1、获取文件名中最后一次出现"."号的位置
        2、根据"."号的位置，获取文件的后缀
        3、判断"."号位置及文件后缀名

        //获取文件名中最后一次出现"."号的位置
        int index = fileName.lastIndexOf('.');

        // 获取文件的后缀
        String prefix = fileName.substring(index + 1, fileName.length());
        //System.out.println(prefix);

        // 判断必须包含"."号，且不能出现在首位，同时后缀名为"java"
        if (index != 0 && prefix.equals("java")) {
            System.out.println("Java文件名正确");
        } else {
            System.out.println("Java文件名无效");
        }

        // 判断邮箱格式是否正确：合法的邮箱名中至少要包含"@", 并且"@"是在"."之前
         /*
        参考步骤：
        1、获取文件名中"@"符号的位置
        2、获取邮箱中"."号的位置
        3、判断必须包含"@"符号，且"@"必须在"."之前

        // 获取邮箱中"@"符号的位置
        int index2 = email.lastIndexOf('@');

        // 获取邮箱中"."号的位置
        int index3 = email.lastIndexOf('.');

        // 判断必须包含"@"符号，且"@"必须在"."之前
        if (index2 != -1 && index3 > index2) {
            System.out.println("邮箱格式正确");
        } else {
            System.out.println("邮箱格式无效");
        }


//2-4

        // 定义一个字符串
        String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";

        // 出现次数
        int num = 0;

        // 循环遍历每个字符，判断是否是字符 a ，如果是，累加次数
        for (int i = 0; i < s.length(); i++) {
            // 获取每个字符，判断是否是字符a
            if (s.charAt(i) == 'a') {
                // 累加统计次数
                num++;
            }
        }
        System.out.println("字符a出现的次数：" + num);


//2-5
        // 创建一个StringBuilder对象，用来存储字符串
        StringBuilder hobby=new StringBuilder("爱慕课");

        System.out.println(hobby);
*/

//2-6
/*
        // 创建一个空的StringBuilder对象
        StringBuilder str = new StringBuilder();

        // 追加字符串
        str.append("jaewkjldfxmopzdm");

        // 从后往前每隔三位插入逗号
        int sum = 0;
        for(int i = str.length()-1;i >= 0;i--){
            sum++;
            if(sum == 3){
                str.insert(i,',');
                sum = 0;
            }
        }

        // 将StringBuilder对象转换为String对象并输出
        System.out.print(str.toString());
*/

//3-1 装箱，拆箱
//        String a = new String("8");
//        System.out.println(a.valueOf(a.toString()));

/*
        // 定义int类型变量，值为86
        int score1 = 86;

        // 创建Integer包装类对象，表示变量score1的值
        Integer score2=new Integer(score1);


        // 将Integer包装类转换为double类型
        double score3=score2.doubleValue();

        // 将Integer包装类转换为float类型
        float score4=score2.floatValue();

        // 将Integer包装类转换为int类型
        int score5 =score2.intValue();

        System.out.println("Integer包装类：" + score2);          //86
        System.out.println("double类型：" + score3);                 //86.0
        System.out.println("float类型：" + score4);               //86.0
        System.out.println("int类型：" + score5);          //86

*/
//3-2
/*
        // 定义double类型变量
        double a = 91.5;

        // 手动装箱就是new Interger(80)
        Double b = new Double(a);

        // 自动装箱
        Double c = a;

        System.out.println("装箱后的结果为：" + b + "和" + c);

        // 定义一个Double包装类对象，值为8
        Double d = new Double(87.0);

        // 手动拆箱
        double e = d.doubleValue();

        // 自动拆箱
        double f = d;

        System.out.println("拆箱后的结果为：" + e + "和" + f);
 */

//3-4
/*
        //将基本类型转换为字符串
        int c = 10;
        String str1 = Integer.toString(c); //方法一
        String str2 = String.valueOf(c);//方法二
        String str3 = c+"";//方法三

        //将字符串转化为基本数据类型
        String str = "8";
        int d = Integer.parseInt(str); //方法-
        int e = Integer.valueOf(str);//方法二


        double m = 78.5;
        //将基本类型转换为字符串
        String str1 =  String.valueOf(m);
        str1 = m+"";
        str1 = Double.toString(78.5);

        System.out.println("m 转换为String型后与整数20的求和结果为： "+(str1+20));        //字符串 + 数字

        String str = "180.20";
        // 将字符串转换为基本类型
        Double a = Double.parseDouble(str);
        a = Double.valueOf(str);

        System.out.println("str 转换为double型后与整数20的求和结果为： "+(a+20));      //自动拆箱，然后算术
*/

//3-6
        //使用 Date 类的默认无参构造方法创建出的对象就代表当前时间   CST 代表 China Standard Time (中国标准时间，也就是北京时间，东八区)。
        //可以使用 SimpleDateFormat 来对日期时间进行格式化，如可以将日期转换为指定格式的文本，也可将文本转换为日期。
/*
        try{
            // 使用format()方法将日期转换为指定格式的文本
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
            SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            // 创建Date对象，表示当前时间
            Date now = new Date();

            // 调用format()方法，将日期转换为字符串并输出
            System.out.println(sdf1.format(now));
            System.out.println(sdf2.format(now));
            System.out.println(sdf3.format(now));

            // 使用parse()方法将文本转换为日期
            String d = "2014-6-1 21:05:36";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            // 调用parse()方法，将字符串转换为日期
            Date date = sdf.parse(d);

            System.out.println(date);
        }catch(ParseException e){
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }

*/

//3-7 Calendar 类的应用
/*
        // 创建Calendar对象
        Calendar c = Calendar.getInstance();

        // 将Calendar对象转换为Date对象
        Date date = c.getTime();

        // 创建SimpleDateFormat对象，指定目标格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 将日期转换为指定格式的字符串
        String now = sdf.format(date);
        System.out.println("当前时间：" + now);
*/

//3-8使用 Math 类操作数据
/*
        // 定义一个整型数组，长度为10
        int length = 10;
        double[] nums = new double[length];

        //通过循环给数组赋值
        for (int i = 0; i < nums.length; i++) {
            // 产生10以内的随机数
            int start = 0,end = 10;

            double x = (double)(Math.random() * (end - start + 1)) + start;        //[0,10]
            nums[i] = x;// 为元素赋值
        }

        //如我们想生成[min,max]区间的整数，可以这样做，int ran=(int)(Math.random()*(max-min+1))+min。
        // 使用foreach循环输出数组中的元素
        for (double num:nums) {
            System.out.print(num + " ");
        }

*/


//4-2


























    }
}